package wiki.generic.med;

import java.util.HashMap;
import java.util.List;

import wiki.generic.contents.Content;
import wiki.generic.contents.ContentsPrototypeFactory;
import wiki.generic.io.ContentsReader;
import wiki.generic.utilities.AlreadyExistingElementException;
import wiki.generic.utilities.PageNotFoundException;
/**
 * 
 * @author <p><strong>JwTeam</strong></p> 
 * Interfaccia per la gestione delle pagine e dei loro contenuti
 */
public interface PagesService {

	/**
	 * 
	 * @param corso Nome corso
	 * @param id id univoco per identificare la pagina
	 * @param path percorso in cui scrivere la nuova pagina
	 * @throws AlreadyExistingElementException lanciata nel caso si cerchi di creare un elemento con lo stesso id
	 */
	public void createNewPage(String corso,String id, String path) throws AlreadyExistingElementException;

	/**
	 * 
	 * @param corso nome corso di cui si vuole la mappa delle pagine
	 * @return Mappa delle pagine del corso
	 */
	public HashMap<String, String> getPagesMap(String corso);

	/**
	 * 
	 * @param corso nome corso
	 * @param id univoco per identificare la pagina
	 * @return lista contenuti della pagina
	 * @throws PageNotFoundException lanciata nel caso di pagina non esistente
	 */
	public List<Content> getCurrentPageContents(String corso,String id)
			throws PageNotFoundException;
	

	/**
	 * 
	 * @param nome Nome contenuto
	 * @param type tipo di contenuto (esempio "img" per le immagini)
	 * @param ID id univoco del contenuto
	 * @param attributes lista di attributi del contenuto
	 * @return il contenuto creato
	 * @see Content
	 */
	public Content generateContent(String nome, String type,
			int ID, List<String> attributes);

	/**
	 * 
	 * @param pfactory un implementazione di ContentsPrototypeFactory
	 * @see ContentsPrototypeFactory
	 */
	public void setPFactory(ContentsPrototypeFactory pfactory);
	

	/**
	 * 
	 * @param creader un implementazione di ContentsReader
	 * @see ContentsReader
	 */
	public void setCreader(ContentsReader creader);

	/**
	 * 
	 * @param corso nome corso
	 * @param current pagina corrente
	 * @param name nome contenuto
	 * @return Contenuto voluto
	 * @throws PageNotFoundException lanciata nel caso di pagina non esistente
	 */
	public Content getContentbyName(String corso, String current, String name) throws PageNotFoundException;
}
